package 简单.其他;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 给你一个日志数组 logs。每条日志都是以空格分隔的字串，其第一个字为字母与数字混合的 标识符 。
 * 有两种不同类型的日志：
 * 字母日志：除标识符之外，所有字均由小写字母组成
 * 数字日志：除标识符之外，所有字均由数字组成
 * 请按下述规则将日志重新排序：
 * 所有 字母日志 都排在 数字日志 之前。
 * 字母日志 在内容不同时，忽略标识符后，按内容字母顺序排序；在内容相同时，按标识符排序。
 * 数字日志 应该保留原来的相对顺序。
 * 返回日志的最终顺序。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reorder-data-in-log-files
 */
public class 重新排列日志文件_937 {

    public static void main(String[] args) {

        String[] logs = {"a1 9 2 3 1", "g1 act car", "zo4 4 7", "ab1 off key dog", "a8 act zoo"};
        System.out.println(Arrays.toString(reorderLogFiles(logs)));

    }

    /**
     * 将数字日志和字母日志分开，然后自定义排序字母日志
     *
     * @param logs
     * @return
     */
    public static String[] reorderLogFiles(String[] logs) {
        List<String> numList = new ArrayList<>();
        List<String> letterList = new ArrayList<>();
        for (String log : logs) {
            if (Character.isDigit(log.split(" ")[1].charAt(0))) {
                numList.add(log);
            } else {
                letterList.add(log);
            }
        }
        letterList.sort((o1, o2) -> {
            // 注意这里只需要分成两份
            String[] split1 = o1.split(" ", 2);
            String[] split2 = o2.split(" ", 2);
            return split1[1].equals(split2[1]) ? split1[0].compareTo(split2[0]) :
                    split1[1].compareTo(split2[1]);
        });
        for (int i = 0; i < numList.size(); i++) {
            letterList.add(numList.get(i));
        }
        return letterList.toArray(new String[letterList.size()]);
    }

}
